﻿'''
题目描述
给出一个仅包含字母的字符串，不包含空格，统计字符串中各个字母（区分大小写）出现的次数，
并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。
如果次数相同，按照自然顺序进行排序，且小写字母在大写字母之前。
输入描述
输入一行，为一个仅包含字母的字符串。
输出描述
按照字母出现次数从大到小的顺序输出各个字母和字母次数，用英文分号分隔，注意末尾的分号；
字母和次数间用英文冒号分隔。
示例1
输入
xyxyXX
输出
x:2;y:2;X:2;
示例2
输入
abababb
输出
b:4;a:3;
说明
b的出现个数比a多，故b排在a之前
解题思路
本题要求对给定的字符串中的字母进行统计，并根据字母的出现次数进行排序，输出格式为 字母:出现次数，并用分号分隔每组结果。
需要注意以下几点关键要求：
区分大小写：小写字母和大写字母被视为不同的字母。例如，a 和 A 是不同的字符。
按照字母出现次数排序：首先，输出出现次数最多的字母。如果多个字母的出现次数相同，则需要进一步排序。
自然顺序排序：
如果出现次数相同，按照字母的自然顺序进行排序。这里的“自然顺序”指的是 ASCII 顺序。
小写字母的 ASCII 值比大写字母的 ASCII 值大，因此需要对同一出现次数的字母进行特殊处理，即 小写字母在同等出现次数的情况
下要排在大写字母之前。
'''
#输入描述：输入一行，为一个仅包含字母的字符串。
#输出描述：按照字母出现次数从大到小的顺序输出各个字母和字母次数，用英文分号分隔，注意末尾的分号；
#字母和次数间用英文冒号分隔。
#示例：
#输入：
# xyxyXX
#输出：
# x:2;y:2;X:2;

#读取输入：
s = input()
#计算字母出现次数并存储到数组
counts = [0] * 150
for c in s:
    counts[ord(c)] += 1
#计算字母出现最大次数并存储
max_count = max(counts)
#从最大次数开始遍历数组，输出字母和次数：最大-1
result = ''
for i in range(max_count,0,-1):
    #先输出满足次数的小写字母，再输出满足次数的大写字母，这样保证了按自然顺序即先小写后大写排序
    for j in range(ord('a'),ord('z') + 1):  #注意包含'z'    
        if counts[j] == i:
            result += chr(j)
            result += ':'
            result += str(i)
            result += ';'
    for j in range(ord('A'),ord('Z') + 1):
        if counts[j] == i:
            result += chr(j)
            result += ':'
            result += str(i)
            result += ';'
#输出结果
print(result)

